home *** CD-ROM | disk | FTP | other *** search
- bbs> Msg# 75755 To: ATARI @ALLE From: DL6DBN Date: 13Sep90/1124
- Subject: PACSAT-Broadcast-Splitter
- Bulletin ID: 139003DB0SGL
- Path: DB0IE!DB0GV!DB0LJ!DK0MWX!DB0SGL
- de DL6DBN @ DB0SGL
-
- Mit dem nachfolgenden Programm können nach einem PACSAT-Umlauf, die unter
- dem 6DBN_DAT Format (siehe auch "Satelliten-Datensammler" unter ATARI) ab-
- gespeicherten Broadcastpakete in bis zu 12 verschiedene Dateien aufgesplit-
- tet werden. Es wird noch keine Prüfsummen gebildet und kontrolliert.
-
- Zum Programmverständnis ist eine gewisse Kenntnis des PACSAT Broadcast
- Protokolls notwendig.
-
- 73 Frank, DL6DBN @ DB0SGL
-
- own_call$="DL6DBN" ! zum eintragen in das Downloader-Feld
- '
- DIM stream$(12),index%(12),fsize%(12)
- FOR i%=0 TO 12
- stream$(i%)=STRING$(32767,0)
- index%(i%)=0
- NEXT i%
- CLS
- PRINT " Select Log-File :"
- FILESELECT "\*.*","",name$
- IF name$=""
- END
- ENDIF
- IF NOT EXIST(name$)
- ALERT 1,"|File doesn't exist !",1," OK ",dummy%
- END
- ENDIF
- OPEN "I",#10,name$
- INPUT #10,fhd$
- IF LEFT$(fhd$,8)<>"6DBN_DAT"
- ALERT 1,"|Wrong File-format !",1," OK ",dummy%
- END
- ENDIF
- CLS
- WHILE NOT EOF(#10)
- INPUT #10,hd$
- IF INSTR(hd$," pid ")
- len%=INP(#10)
- frm$=INPUT$(len%+1,#10)
- ENDIF
- IF INSTR(hd$," to QST-1 ") AND INSTR(hd$," pid BB")
- flag%=ASC(LEFT$(frm$,1))
- IF (flag% AND 2)=2
- offset%=0
- FOR i%=0 TO 2
- offset%=offset%+ASC(MID$(frm$,7+i%,1))*256^i%
- NEXT i%
- ENDIF
- IF (flag% AND 1)=1
- length%=ASC(MID$(frm$,10,1))
- start%=11
- ELSE
- start%=10
- length%=len%-start%
- ENDIF
- file_type%=ASC(MID$(frm$,6,1))
- file_id%=0
- FOR i%=0 TO 3
- file_id%=file_id%+ASC(MID$(frm$,2+i%,1))*256^i%
- ptr%=0
- FOR j%=1 TO 12
- EXIT IF file_id%=index%(j%)
- NEXT j%
- IF j%<=12
- ptr%=j%
- ELSE
- FOR j%=1 TO 12
- EXIT IF index%(j%)=0
- NEXT j%
- IF j%<=12
- index%(j%)=file_id%
- ptr%=j%
- PRINT AT(1,j%*2-1);"Stream opened : id ";HEX$(index%(j%));" type ";HEX$(file_type%);" as ";ptr%;
- ELSE
- PRINT AT(1,25);"Too many streams";
- ENDIF
- ENDIF
- NEXT i%
- IF MID$(frm$,start%,2)="¬U"
- @fileheader
- ENDIF
- IF (offset%+length%)<32767
- MID$(stream$(ptr%),offset%+1,length%)=MID$(frm$,start%,length%)
- ELSE
- PRINT AT(42,ptr%*2-1);"Stream Overflow";
- ENDIF
- ENDIF
- WEND
- CLOSE #10
- CLS
- PRINT " Select Directory to write :"
- FILESELECT "\*.*","",dr$
- FOR i%=LEN(dr$) TO 1 STEP -1
- EXIT IF MID$(dr$,i%,1)="\"
- NEXT i%
- dr$=LEFT$(dr$,i%)
- CLS
- FOR i%=1 TO 12
- IF index%(i%)<>0
- hex_name$=dr$+HEX$(index%(i%))
- PRINT "Writing Stream ";i%;" to ";hex_name$
- OPEN "O",#2,hex_name$
- PRINT #2,LEFT$(stream$(i%),fsize%(i%));
- CLOSE #2
- ENDIF
- NEXT i%
- END
- '
- PROCEDURE fileheader
- hend$=STRING$(3,0)
- PRINT AT(3,ptr%*2);"PFH: ";
- hpos%=start%+2
- WHILE MID$(frm$,hpos%,3)<>hend$
- hd_id%=ASC(MID$(frm$,hpos%,1))
- hd_len%=ASC(MID$(frm$,hpos%+2,1))
- hpos%=hpos%+3
- hd_data$=MID$(frm$,hpos%,hd_len%)
- IF hd_id%>=1 AND hd_id%<=11
- ON hd_id% GOSUB nil,file_name,file_ext,file_size,nil,nil,seu_flag,nil,nil,nil,nil
- ENDIF
- IF hd_id%>=16 AND hd_id%<=21
- ON hd_id%-15 GOSUB source,uploader,nil,nil,destination,downloader
- ENDIF
- hpos%=hpos%+hd_len%
- WEND
- PRINT AT(8,ptr%*2);finame$;".";fext$;" fm ";src$;" upl ";upl$;" to ";dest$;" size ";size%;" seu ";seu%;
- RETURN
- '
- PROCEDURE nil
- RETURN
- '
- PROCEDURE file_name
- finame$=hd_data$
- RETURN
- '
- PROCEDURE file_ext
- fext$=hd_data$
- RETURN
- '
- PROCEDURE file_size
- size%=0
- FOR k%=1 TO hd_len%
- size%=size%+ASC(MID$(hd_data$,k%,1))*256^(k%-1)
- NEXT k%
- IF size%<=32767
- fsize%(ptr%)=size%
- ELSE
- fsize%(ptr%)=32767
- ENDIF
- RETURN
- '
- PROCEDURE seu_flag
- seu%=ASC(LEFT$(hd_data$,1))
- RETURN
- '
- PROCEDURE source
- src$=hd_data$
- RETURN
- '
- PROCEDURE uploader
- upl$=hd_data$
- RETURN
- '
- PROCEDURE destination
- dest$=hd_data$
- RETURN
- '
- PROCEDURE downloader
- MID$(frm$,hpos%,hd_len%)=LEFT$(own_call$,hd_len%)
- RETURN
-
-